home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ivl / src / ivl_oi.c < prev    next >
Text File  |  2000-06-21  |  4KB  |  188 lines

  1. /*
  2. #define DEBUG
  3. *    ivl
  4. *
  5. *    各種情報のみの表示処理
  6. *
  7. *    from Mar.13,2000    by dummy.x.(with J-SAGA INDUSTRY)
  8. */
  9. #include    <stdio.h>
  10. #include    "easymac.h"
  11. #include    "libpt4.h"
  12. #include    "ivl.h"
  13. #include    "mkpathfn.c"
  14.  
  15.  
  16. /*
  17. *    ↓↓↓ アイコン情報のみ表示処理 ↓↓↓
  18. */
  19. /* アイコン情報を表示する
  20. *    引数:    fnamp    - ファイル名へのポインタ
  21. *        szstrp    - サイズ文字列へのポインタ
  22. *        pathp    - パス名へのポインタ
  23. */
  24. #define    print_icon_info(fnamp, szstrp, pathp)    \
  25.     printf("%-22s %-7s %s\n", fnamp, szstrp, pathp)
  26.  
  27. /* 1ファイルぶんのアイコン情報を表示する
  28. *    引数:    flistp    - 表示アイコンファイルの登録リストへのポインタ
  29. */
  30. static
  31. void print_one_info(const filelist_t *flistp)
  32. {
  33.     int uke;
  34.     const char *szstrp;
  35.     pt4_struct_t phed;
  36.     char buf[5 + 1 + 5 + 1];    /* "???x???" ただし ??? は最大5桁*/
  37.  
  38.     /* ファイルを読み込み/確認する */
  39.     uke = read_pt4_head(&phed, make_path_filename(flistp->pathp, &flistp->fbuf));
  40.  
  41.     /* 読み込み/確認の結果に応じてサイズ文字列を取得 */
  42.     switch (uke) {
  43.     case RDPT4_SUCCESS:    /* 無事読み込めた */
  44.         sprintf(buf, "%3hux%3hu", phed.width, phed.height);
  45.         szstrp = buf;
  46.         break;
  47.     default:        /* その他 */
  48.     case RDPT4_READ_FAIL:    /* ファイル読み込み失敗 */
  49.         szstrp = "read er";
  50.         break;
  51.     case RDPT4_MALLOC_FAIL:    /* メモリ確保失敗 */
  52.         szstrp = "no mem";
  53.         break;
  54.     case RDPT4_ILL_FORMAT:    /* .PT4 ではない */
  55.         szstrp = "not PT4";
  56.         break;
  57.     }
  58.  
  59.     /* 表示 */
  60.     print_icon_info(flistp->fbuf.name, szstrp, flistp->pathp);
  61. }
  62.  
  63. /* 表示の区切り行を生成する
  64. *    引数:    bufp    - 生成先バッファアドレス(最低 96+1.b 必要)
  65. */
  66. static
  67. void make_kugiri_line(char *bufp)
  68. {
  69.     memset(bufp, '-', 95);    /* まず '-' で埋める */
  70.     bufp[22] = '+';
  71.     bufp[22+1+7] = '+';
  72.     bufp[95] = '\n';
  73.     bufp[96] = '\0';
  74. }
  75.  
  76. /* 登録されている全てのアイコンの情報を表示する
  77. *    返値:    無事に終了すれば 0、何か問題があったら !0
  78. *    注記    * 今のところ、返値は必ず 0 になる。
  79. */
  80. int print_all_icon_info(void)
  81. {
  82.     const filelist_t *ftblp = arg_file_tblp;
  83.     const filelist_t *const ftblstop = ftblp + arg_file_kaz;
  84.     char buf[96 + 1];
  85.  
  86.     /* ガイドライン表示 */
  87.     print_icon_info(" filename", " size", " path");
  88.     make_kugiri_line(buf);
  89.     printf(buf);
  90.  
  91.     /* ファイル情報表示 */
  92.     do {
  93.         /* 画像表示 */
  94.         print_one_info(ftblp);
  95.  
  96.         /* 次のファイルへ */
  97.         ftblp++;
  98.  
  99.     } while (ftblp < ftblstop);
  100.  
  101.     /* 締め表示 */
  102.     printf(buf);
  103.  
  104.     return 0;    /* 必ず正常終了 */
  105. }
  106.  
  107.  
  108. /*
  109. *    ↓↓↓ 表示可能画像サイズ表示処理 ↓↓↓
  110. */
  111. /* アイコンサイズをファイルテーブルに設定する
  112. *    引数:    flistp    - 表示アイコンファイルの登録リストへのポインタ
  113. *    返値:    無事設定できたら 0、でなければ !0
  114. */
  115. static
  116. int set_one_size(filelist_t *flistp)
  117. {
  118.     int result;
  119.     int w, h;
  120.     pt4_struct_t phed;
  121.  
  122.     /* ファイルを読み込み/確認する */
  123.     result = read_pt4_head(&phed, make_path_filename(flistp->pathp, &flistp->fbuf));
  124.  
  125.     /* 読み込み/確認の結果に応じてサイズを取得 */
  126.     if (result == RDPT4_SUCCESS) {    /* 無事読み込めた */
  127.         w = phed.width;
  128.         h = phed.height;
  129.     } else {            /* 何らかの問題が起きた */
  130.         w = h = -1;
  131.     }
  132.  
  133.     /* 設定 */
  134.     flistp->wdots = w;
  135.     flistp->hdots = h;
  136.  
  137.     return result;
  138. }
  139.  
  140. /* テーブル中の各ファイルの画像サイズをテーブルに設定する
  141. */
  142. static
  143. void set_all_icon_size(void)
  144. {
  145.     filelist_t *ftblp = arg_file_tblp;
  146.     filelist_t *const ftblstop = ftblp + arg_file_kaz;
  147.  
  148.     printf_at_verbose(("size checking "));
  149.  
  150.     /* 画像サイズ登録 */
  151.     do {
  152.         /* 画像表示 */
  153.         int uke = set_one_size(ftblp);
  154.  
  155.         printf_at_verbose(((uke)? "x": "."));
  156.  
  157.         /* 次のファイルへ */
  158.         ftblp++;
  159.  
  160.     } while (ftblp < ftblstop);
  161.  
  162.     printf_at_verbose(("\n"));
  163. }
  164.  
  165. /* 現在の設定で表示可能な画像サイズ/画像個数を表示する
  166. *    返値:    無事に終了すれば 0、何か問題があったら !0
  167. *    注記    * 今のところ、返値は必ず 0 になる。
  168. */
  169. int print_pageview_data(void)
  170. {
  171.     /* 最大サイズから算出するように指示されてたら
  172.     *    各ファイルの画像サイズをテーブルに登録しておく
  173.     */
  174. #define    FBITMSK_ZX_OPT    (biton(FBIT_PAGE_BY_SIZE) | biton(FBIT_BYSZ_FINDMX))
  175.     if ((state_flag_bits & FBITMSK_ZX_OPT) == FBITMSK_ZX_OPT) {
  176.         set_all_icon_size();
  177.     }
  178.  
  179.     init_view_info();    /* 画像表示範囲などを設定 */
  180.  
  181.     /* 結果を表示 */
  182.     ttlprintf("この指定では、横%2d×縦%2d個・横%2d×縦%2ddotを表示できます。\n"
  183.         , pat_on_line, pat_line_kaz, pat_disp_area_w, pat_disp_area_gh);
  184.  
  185.     return 0;    /* 必ず正常終了 */
  186. }
  187.  
  188.